/* 
 * File:   ClientConfFileManager.h
 * Author: nahuel
 *
 * Created on May 18, 2013, 5:51 PM
 */

#ifndef CLIENTCONFFILEMANAGER_H
#define	CLIENTCONFFILEMANAGER_H

#include <string>
#include "common_tinyxml.h"

namespace TP {
/**
 * @class ClientConfFileManager
 * Maneja el archivo de configuración de datos del Cliente
 */
class ClientConfFileManager {
    private:
        /*
         * Nombre de nodos
         */
        static std::string generalNodeName;
        static std::string pathAuNodeName;
        static std::string intervaloPollingNodeName;
        
        static std::string conexionNodeName;
        static std::string ipServidorNodeName;
        static std::string puertoServidorNodeName;
        static std::string usuarioNodeName;
        static std::string passwordNodeName;
            
        
        TiXmlDocument* _confFile;
        std::string _filePath;
        
        /**
         *  @brief Constructor que crea el archivo de configuracion. Se utiliza 
         *  cuando no se encuentra el archivo solicitado.
         */
        void _CrearArchivo();
        
    public:
        /**
         * @brief Si no existe el Archivo de configuración de cliente lo crea.
         */
        ClientConfFileManager(const std::string& filePath);
        
        /**
         * @brief Obtiene el Path de Archivos Ubicuos
         * @return Path de archivos ubicuos
         */
        std::string GetPathAU();
        
        /**
         * @brief Obtiene el Intervalo de Polling para chequear cambios en el 
         * path de AU
         * @return Intervalo de Polling en segundos
         */
        unsigned int GetIntervaloPolling();
        
        /**
         * @brief Obtiene el IP del Servidor
         * @return Número de IP del Servidor
         */
        std::string GetIpServidor();
        
        /**
         * @brief Obtiene el puerto donde va a escuchar el Servidor
         * @return Número de puerto
         */
        std::string GetPuertoServidor();
        
        /**
         * @brief Obtiene el Nombre de Usuario
         * @return Nombre de Usuario
         */
        std::string GetUsuario();
        
        /**
         * @brief Obtiene el Password del Usuario
         * @return Password del Usuario
         */
        std::string GetPassword();
        
        /**
         * @brief Setea el directorio de Archivos Ubicuos
         * @param pathAu path del directorio de Archivos Ubicuos
         * @return VOID
         */
        void SetPathAU(const std::string& pathAu);
        
        /**
         * @brief Setea el intervalo de polling 
         * @param intervaloPolling intervalo en segundos que luego se utilizará
         * para polear el directorio AU
         * @return VOID
         */
        void SetIntervaloPolling(unsigned int intervaloPolling);
        
        /**
         * @brief Define la IP del Servidor
         * @param ipServidor Numero de IP del Servidor
         * @return VOID
         */
        void SetIpServidor(const std::string& ipServidor);
        
        /**
         * @brief Define el puerto en donde escuchará el Servidor
         * @param puertoServidor Número de Puerto
         * @return VOID
         */
        void SetPuertoServidor(const std::string &puertoServidor);
        /**
         * @brief Define el Nombre de Usuario
         * @param usuario Nombre de Usuario
         * @return VOID
         */
        void SetUsuario(const std::string& usuario);
        
        /**
         * @brief Define el Password del Usuario
         * @param password Password del Usuario
         * @return VOID
         */
        void SetPassword(const std::string& password);
        
        /**
         * @brief Almacena los cambios en XML
         * @return VOID
         */
        void SaveChanges();
        
        /**
         * @brief Destructor que libera los recursos utilizados
         */
        virtual ~ClientConfFileManager();
};

}

#endif	/* CLIENTCONFFILEMANAGER_H */

